<<<<<<< HEAD
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✓ ggplot2 3.3.5 ✓ purrr 0.3.4
## ✓ tibble 3.1.6 ✓ dplyr 1.0.8
## ✓ tidyr 1.1.4 ✓ stringr 1.4.0
## ✓ readr 2.1.1 ✓ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
##
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
##
## date, intersect, setdiff, union
## Loading required package: viridisLite
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
##
## Attaching package: 'maps'
## The following object is masked from 'package:viridis':
##
## unemp
## The following object is masked from 'package:purrr':
##
## map
## Google's Terms of Service: https://cloud.google.com/maps-platform/terms/.
## Please cite ggmap if you use it! See citation("ggmap") for details.
##
## Attaching package: 'ggmap'
## The following object is masked from 'package:plotly':
##
## wind
!(headlines_graphic)
=======
>>>>>>> 8000e0777d88f16020f124d0a6f0b5fa6a1bc957
Women in Headlines Data
The data taken involved the frequency of words used sorted by theme and frequency of words by country. The themes are crime and violence, empowerment, female stereotypes, people and places, race, ethnicity and identity, and no theme. The words were also ranked by theme based on frequency of word use. The news sites were also assigned values for bias and polarity, the calculations are explained at the bottom of the article. There are also headline examples which are individually given a bias score.

Words Appearing in Headlines
Freqency per Theme
A cumulative bar graph for the words used to describe women used in headlines. They are divided into 5 main categories with crime and violence having the most words and the highest frequency. The graph is interactive so each word can be highlighted with the individual word and frequency.
<<<<<<< HEAD
=======
>>>>>>> 8000e0777d88f16020f124d0a6f0b5fa6a1bc957
Top Five Words per Theme
The words taken from headlines across different news sites were sorted into theme categories and ranked by occurrence. The following column chart describes the top five words used sorted by theme with the word ‘man’ appearing almost triple the average word use. Crime and violence have the highest average word count of any theme.

Data taken by Country
Country Map
Data was taken from news sites from four different countries with varying numbers of news sources used. From the United States of America, 86 new sites were used. From the United Kingdom, 41 news sites were used. From South Africa, 23 news sites were used. From India, 36 news sites were used.

Bias Score by Country
The average bias of news sites often varies from the minimum and maximum bias values given to different headlines. The following column chart displays the mean bias by country along with the maximum bias of a headline published by a site in the country. The minimum bias score is zero for all countries so no visual representation was added.
<<<<<<< HEAD

=======

>>>>>>> 8000e0777d88f16020f124d0a6f0b5fa6a1bc957
Polarity of Words
Polarity over Time
In this graph, we visualize how the polarity of headlines has changed over the past ten years. The polarity scores represent how sensationalized a headline is. Sensational headlines sacrifice accuracy in an attempt to provoke an emotional response from readers. They are designed to generate interest through emotional manipulation. In general, the polarity of news headlines about women is higher than the polarity for other headlines. In the past ten years, polarity has increased, and the difference between the polarity of headlines about women and the polarity of general headlines has widened.
<<<<<<< HEAD
## `summarise()` has grouped output by 'year'. You can override using the
## `.groups` argument.
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

=======

>>>>>>> 8000e0777d88f16020f124d0a6f0b5fa6a1bc957
Polarity of News Sites
In the graph below, the difference in the average polarity score between headlines about women and other headlines are shown for each site. The sites are ordered by the largest average polarity of headlines about women. Almost every site’s headlines about women are more polarizing than their headlines about other topics.

Headline Examples
<<<<<<< HEAD
=======
>>>>>>> 8000e0777d88f16020f124d0a6f0b5fa6a1bc957
| Headline |
Site |
Country |
Bias |
| 'Lady Bird' buzzes through young sexuality |
iol.co.za |
South Africa |
0 |
| American Woman, Divorced From Saudi Husband, Is Trapped in Saudi Arabia |
msn.com |
India |
0 |
| 'SA poorer without her' SACP reacts to Madikizela Mandela's death |
News24.com |
South Africa |
0 |
<<<<<<< HEAD
=======
>>>>>>> 8000e0777d88f16020f124d0a6f0b5fa6a1bc957
| Headline |
Site |
Country |
Bias |
| Girl with severe eczema told her mum she 'didn't want to look at herself in the mirror' she's now a model |
manchestereveningnews.co.uk |
UK |
1.000 |
| A Mother Said Her 9 Year Old Daughter Killed Herself Because She Was Bullied For Being Friends With A White Boy |
buzzfeed.com |
UK |
0.833 |
| Woman reunited with her long lost brother reveals surprise as she discovers she's now her SISTER |
dailyrecord.co.uk |
UK |
0.833 |
<<<<<<< HEAD
LS0tCnRpdGxlOiAiSGVhZGxpbmVzIgphdXRob3I6Ci0gbmFtZTogIkF1ZHJleSBTbXljemVrIgotIG5hbWU6ICJFbGxlcnkgSXNsYW5kIgpkYXRlOiAiNC8yOC8yMDIyIgpvdXRwdXQ6IAogIGh0bWxfZG9jdW1lbnQ6CiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgZGZfcHJpbnQ6IHBhZ2VkCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlCi0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0UsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkKYGBgCgpgYGB7ciBsaWJyYXJpZXMsIGVjaG89RkFMU0V9CmxpYnJhcnkodGlkeXZlcnNlKSAgICAgIyBmb3IgZ3JhcGhpbmcgYW5kIGRhdGEgY2xlYW5pbmcKbGlicmFyeShsdWJyaWRhdGUpICAgICAjIGZvciBkYXRlIG1hbmlwdWxhdGlvbgpsaWJyYXJ5KGdndGhlbWVzKSAgICAgICMgZm9yIGV2ZW4gbW9yZSBwbG90dGluZyB0aGVtZXMKbGlicmFyeShnZ2FuaW1hdGUpICAgICAjIGZvciBhZGRpbmcgYW5pbWF0aW9uIGxheWVycyB0byBnZ3Bsb3RzCmxpYnJhcnkoUkNvbG9yQnJld2VyKSAgIyBmb3IgY29sb3IgcGFsZXR0ZXMKbGlicmFyeSh2aXJpZGlzKQpsaWJyYXJ5KHBsb3RseSkgICAgICAgICMgZm9yIHRoZSBnZ3Bsb3RseSgpIC0gYmFzaWMgaW50ZXJhY3Rpdml0eQpsaWJyYXJ5KGdnYW5pbWF0ZSkgICAgICMgZm9yIGFkZGluZyBhbmltYXRpb24gbGF5ZXJzIHRvIGdncGxvdHMKbGlicmFyeSh0cmFuc2Zvcm1yKSAgICAjIGZvciAidHdlZW5pbmciIChnZ2FuaW1hdGUpCmxpYnJhcnkoZ2lmc2tpKSAgICAgICAgIyBuZWVkIHRoZSBsaWJyYXJ5IGZvciBjcmVhdGluZyBnaWZzIGJ1dCBkb24ndCBuZWVkIHRvIGxvYWQgZWFjaCB0aW1lCmxpYnJhcnkoZ3QpCmxpYnJhcnkobWFwcykKbGlicmFyeShnZ21hcCkKdGhlbWVfc2V0KHRoZW1lX21pbmltYWwoKSkgIyBNeSBmYXZvcml0ZSBnZ3Bsb3QoKSB0aGVtZSA6KQpgYGAKCmBgYHtyLCBlY2hvPUZBTFNFfQpmcmVxX3RoZW1lX3dvcmRzIDwtIHJlYWQuY3N2KCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vdGhlLXB1ZGRpbmcvZGF0YS9tYXN0ZXIvd29tZW4taW4taGVhZGxpbmVzL3dvcmRfdGhlbWVzX2ZyZXEuY3N2IikKZnJlcV9jb3VudHJ5X3dvcmRzIDwtIHJlYWQuY3N2KCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vdGhlLXB1ZGRpbmcvZGF0YS9tYXN0ZXIvd29tZW4taW4taGVhZGxpbmVzL3dvcmRfY291bnRyeV9mcmVxLmNzdiIpCmhlYWRsaW5lX3NpdGUgPC0gcmVhZC5jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS90aGUtcHVkZGluZy9kYXRhL21hc3Rlci93b21lbi1pbi1oZWFkbGluZXMvaGVhZGxpbmVzX3NpdGUuY3N2IikKd29yZF90aGVtZV9yYW5rIDwtIHJlYWQuY3N2KCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vdGhlLXB1ZGRpbmcvZGF0YS9tYXN0ZXIvd29tZW4taW4taGVhZGxpbmVzL3dvcmRfdGhlbWVzX3JhbmsuY3N2IikKaGVhZGxpbmVfZXhhbXBsZXMgPC0gcmVhZC5jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS90aGUtcHVkZGluZy9kYXRhL21hc3Rlci93b21lbi1pbi1oZWFkbGluZXMvaGVhZGxpbmVzLmNzdiIpCnBvbGFyaXR5X3NpdGUgPC0gcmVhZC5jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS90aGUtcHVkZGluZy9kYXRhL21hc3Rlci93b21lbi1pbi1oZWFkbGluZXMvcG9sYXJpdHlfY29tcGFyaXNvbl9zaXRlX2NvdW50cnlfdGltZS5jc3YiKQpwb2xhcml0eV9vdmVyX3RpbWUgPC0gcmVhZC5jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS90aGUtcHVkZGluZy9kYXRhL21hc3Rlci93b21lbi1pbi1oZWFkbGluZXMvcG9sYXJpdHlfY29tcGFyaXNvbl9jb3VudHJ5X3RpbWUuY3N2IikKYGBgCgoKYGBge3IsIGVjaG8gPSBGQUxTRX0KcGl2b3RfY291bnRyeV93b3JkIDwtIGZyZXFfY291bnRyeV93b3JkcyAlPiUgCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSAtY291bnRyeSwKICAgICAgICAgICAgICAgbmFtZXNfdG8gPSAid29yZCIsCiAgICAgICAgICAgICAgIHZhbHVlc190byA9ICJudW1iZXIiKSAlPiUgCiAgZmlsdGVyKHdvcmQgIT0gIlgiKSAlPiUgCiAgbmEub21pdCgpCmBgYAoKCiEoaGVhZGxpbmVzX2dyYXBoaWMpCgoKIyMgV29tZW4gaW4gSGVhZGxpbmVzIERhdGEKCiMjIyMgVGhlIGRhdGEgdGFrZW4gaW52b2x2ZWQgdGhlIGZyZXF1ZW5jeSBvZiB3b3JkcyB1c2VkIHNvcnRlZCBieSB0aGVtZSBhbmQgZnJlcXVlbmN5IG9mIHdvcmRzIGJ5IGNvdW50cnkuIFRoZSB0aGVtZXMgYXJlIGNyaW1lIGFuZCB2aW9sZW5jZSwgZW1wb3dlcm1lbnQsIGZlbWFsZSBzdGVyZW90eXBlcywgcGVvcGxlIGFuZCBwbGFjZXMsIHJhY2UsIGV0aG5pY2l0eSBhbmQgaWRlbnRpdHksIGFuZCBubyB0aGVtZS4gVGhlIHdvcmRzIHdlcmUgYWxzbyByYW5rZWQgYnkgdGhlbWUgYmFzZWQgb24gZnJlcXVlbmN5IG9mIHdvcmQgdXNlLiBUaGUgbmV3cyBzaXRlcyB3ZXJlIGFsc28gYXNzaWduZWQgdmFsdWVzIGZvciBiaWFzIGFuZCBwb2xhcml0eSwgdGhlIGNhbGN1bGF0aW9ucyBhcmUgZXhwbGFpbmVkIGF0IHRoZSBib3R0b20gb2YgdGhlIGFydGljbGUuIFRoZXJlIGFyZSBhbHNvIGhlYWRsaW5lIGV4YW1wbGVzIHdoaWNoIGFyZSBpbmRpdmlkdWFsbHkgZ2l2ZW4gYSBiaWFzIHNjb3JlLgpcbgoKKioqCgoKIyMgV29yZHMgdXNlZCBpbiBIZWFkbGluZXMKXG4KIyMjIEZyZXFlbmN5IHBlciBUaGVtZSBcbgojIyMjIyBBIGN1bXVsYXRpdmUgYmFyIGdyYXBoIGZvciB0aGUgd29yZHMgdXNlZCB0byBkZXNjcmliZSB3b21lbiB1c2VkIGluIGhlYWRsaW5lcy4gVGhleSBhcmUgZGl2aWRlZCBpbnRvIDUgbWFpbiBjYXRlZ29yaWVzIHdpdGggY3JpbWUgYW5kIHZpb2xlbmNlIGhhdmluZyB0aGUgbW9zdCB3b3JkcyBhbmQgdGhlIGhpZ2hlc3QgZnJlcXVlbmN5LiBUaGUgZ3JhcGggaXMgaW50ZXJhY3RpdmUgc28gZWFjaCB3b3JkIGNhbiBiZSBoaWdobGlnaHRlZCB3aXRoIHRoZSBpbmRpdmlkdWFsIHdvcmQgYW5kIGZyZXF1ZW5jeS4KXG4KCgpgYGB7ciwgZWNobz1GQUxTRX0KcGl2b3Rfd29yZHMgPC0gZnJlcV90aGVtZV93b3JkcyAlPiUgCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSAtdGhlbWUsCiAgICAgICAgICAgICAgIG5hbWVzX3RvID0gIndvcmQiLAogICAgICAgICAgICAgICB2YWx1ZXNfdG8gPSAiZnJlcSIpICU+JSAKICBuYS5vbWl0KCkKCndvcmRfcGxvdCA8LSBwaXZvdF93b3JkcyAlPiUgCiAgZmlsdGVyKHRoZW1lICE9ICJObyB0aGVtZSIpICU+JSAKICBnZ3Bsb3QoYWVzKHggPSB0aGVtZSwgCiAgICAgICAgICAgICB5ID0gZnJlcSwgCiAgICAgICAgICAgICBmaWxsID0gZmN0X3Jlb3JkZXIod29yZCwgZnJlcSksCiAgICAgICAgICAgICB0ZXh0ID0gcGFzdGUoIndvcmQ6Iiwgd29yZCkpKSArCiAgICBnZW9tX2NvbChjb2xvciA9ICJibGFjayIpICsKICAgIHNjYWxlX2ZpbGxfdmlyaWRpc19kKG9wdGlvbiA9ICJ2aXJpZGlzIikgKwogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArCiAgICBsYWJzKHRpdGxlID0gIkN1bXVsYXRpdmUgRnJlcXVlbmN5IG9mIFdvcmRzIGRlc2NyaWJpbmcgV29tZW4gaW4gSGVhZGxpbmVzIiwKICAgICAgIHggPSAiIiwKICAgICAgIHkgPSAiRnJlcXVlbmN5IikrCiAgICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKCgpnZ3Bsb3RseSh3b3JkX3Bsb3QsCiAgICAgICAgIHRvb2x0aXAgPSBjKCJ5IiwgInRleHQiKSkKYGBgCgojIyMgVG9wIEZpdmUgV29yZHMgcGVyIFRoZW1lCiMjIyMjIFRoZSB3b3JkcyB0YWtlbiBmcm9tIGhlYWRsaW5lcyBhY3Jvc3MgZGlmZmVyZW50IG5ld3Mgc2l0ZXMgd2VyZSBzb3J0ZWQgaW50byB0aGVtZSBjYXRlZ29yaWVzIGFuZCByYW5rZWQgYnkgb2NjdXJyZW5jZS4gVGhlIGZvbGxvd2luZyBjb2x1bW4gY2hhcnQgZGVzY3JpYmVzIHRoZSB0b3AgZml2ZSB3b3JkcyB1c2VkIHNvcnRlZCBieSB0aGVtZSB3aXRoIHRoZSB3b3JkICdtYW4nIGFwcGVhcmluZyBhbG1vc3QgdHJpcGxlIHRoZSBhdmVyYWdlIHdvcmQgdXNlLiBDcmltZSBhbmQgdmlvbGVuY2UgaGF2ZSB0aGUgaGlnaGVzdCBhdmVyYWdlIHdvcmQgY291bnQgb2YgYW55IHRoZW1lLiAKXG4KCmBgYHtyLCBlY2hvPUZBTFNFfQp3b3JkX3RoZW1lX3JhbmsgJT4lIAogIGZpbHRlcihgcmFua2AgPCA2KSAlPiUgCiAgc2VsZWN0KCFgWGApICU+JSAKICBnZ3Bsb3QoYWVzKHkgPSBmY3RfcmVvcmRlcih3b3JkLCB0aGVtZSksIHggPSBjb3VudCkpICsKICBnZW9tX2NvbChhZXMoZmlsbCA9IHRoZW1lKSkrCiAgc2NhbGVfZmlsbF92aXJpZGlzX2Qob3B0aW9uID0gInZpcmlkaXMiKSArCiAgI3RoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikrCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpKwogIGxhYnModGl0bGUgPSAiQ291bnQgb2YgVG9wIDUgd29yZHMgcGVyIFRoZW1lIiwKICAgICAgIHkgPSAiIiwKICAgICAgIHggPSAiIikKYGBgCgoqKiogCgojIyBEYXRhIHRha2VuIGJ5IENvdW50cnkKXG4KCiMjIyBDb3VudHJ5IE1hcFxuCgojIyMjIyBEYXRhIHdhcyB0YWtlbiBmcm9tIG5ld3Mgc2l0ZXMgZnJvbSBmb3VyIGRpZmZlcmVudCBjb3VudHJpZXMgd2l0aCB2YXJ5aW5nIG51bWJlcnMgb2YgbmV3cyBzb3VyY2VzIHVzZWQuIEZyb20gdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSwgODYgbmV3IHNpdGVzIHdlcmUgdXNlZC4gRnJvbSB0aGUgVW5pdGVkIEtpbmdkb20sIDQxIG5ld3Mgc2l0ZXMgd2VyZSB1c2VkLiBGcm9tIFNvdXRoIEFmcmljYSwgMjMgbmV3cyBzaXRlcyB3ZXJlIHVzZWQuIEZyb20gSW5kaWEsIDM2IG5ld3Mgc2l0ZXMgd2VyZSB1c2VkLiAKXG4KCmBgYHtyLCBmaWcuYWx0PSAiQSB3b3JsZCBtYXAgd2l0aCB0aGUgVVNBLCB0aGUgVUssIFNvdXRoIEFmcmljYSwgYW5kIEluZGlhIGNvbG9yZWQgaW4gZ3JlZW4gdG8gc2lnbmlmeSB3aGVyZSBkYXRhIHdhcyB0YWtlbiBmcm9tLiIsIGVjaG89RkFMU0V9CndvcmxkX21hcCA8LSBtYXBfZGF0YSgid29ybGQiKQoKaGVhZGxpbmVfc2l0ZSAlPiUgCiAgZ3JvdXBfYnkoY291bnRyeV9vZl9wdWIpICU+JSAKICBzdW1tYXJpc2UoYmlhc19jb3VudHJ5ID0gbWVhbihiaWFzKSkgJT4lIAogIGdncGxvdCgpICsKICAgIGdlb21fbWFwKGRhdGEgPSB3b3JsZF9tYXAsIG1hcCA9IHdvcmxkX21hcCwKICAgICAgICAgICAgIGFlcyhsb25nLCBsYXQsIG1hcF9pZCA9IHJlZ2lvbiksCiAgICAgICAgICAgICBmaWxsID0gImxpZ2h0Z3JheSIpKwogICAgZ2VvbV9tYXAobWFwID0gd29ybGRfbWFwLAogICAgICAgICAgICBhZXMobWFwX2lkID0gYGNvdW50cnlfb2ZfcHViYCksCiAgICAgICAgICAgIGZpbGwgPSAicHVycGxlNCIsCiAgICAgICAgICAgIGNvbG9yID0gInB1cnBsZTQiKSsKICAgIGV4cGFuZF9saW1pdHMoeCA9IHdvcmxkX21hcCRsb25nLCB5ID0gd29ybGRfbWFwJGxhdCkgKyAKICAgIHRoZW1lX21hcCgpCmBgYAoKIyMjIEJpYXMgU2NvcmUgYnkgQ291bnRyeVxuCiMjIyMjIFRoZSBhdmVyYWdlIGJpYXMgb2YgbmV3cyBzaXRlcyBvZnRlbiB2YXJpZXMgZnJvbSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBiaWFzIHZhbHVlcyBnaXZlbiB0byBkaWZmZXJlbnQgaGVhZGxpbmVzLiBUaGUgZm9sbG93aW5nIGNvbHVtbiBjaGFydCBkaXNwbGF5cyB0aGUgbWVhbiBiaWFzIGJ5IGNvdW50cnkgYWxvbmcgd2l0aCB0aGUgbWF4aW11bSBiaWFzIG9mIGEgaGVhZGxpbmUgcHVibGlzaGVkIGJ5IGEgc2l0ZSBpbiB0aGUgY291bnRyeS4gVGhlIG1pbmltdW0gYmlhcyBzY29yZSBpcyB6ZXJvIGZvciBhbGwgY291bnRyaWVzIHNvIG5vIHZpc3VhbCByZXByZXNlbnRhdGlvbiB3YXMgYWRkZWQuClxuCgpgYGB7ciwgZWNobz1GQUxTRX0KaGVhZGxpbmVfc2l0ZSAlPiUKICBncm91cF9ieShjb3VudHJ5X29mX3B1YikgJT4lCiAgc3VtbWFyaXplKG1lYW5fYmlhcyA9IG1lYW4oYmlhcyksIG1heF9iaWFzID0gbWF4KGJpYXMpKSAlPiUgCiAgZ2dwbG90KCkrCiAgZ2VvbV9jb2woYWVzKHkgPSBjb3VudHJ5X29mX3B1YiwgeCA9IG1heF9iaWFzKSwgZmlsbCA9ICIjYzJiMWUzIiwgd2lkdGggPSAuNzUpKwogIGdlb21fY29sKGFlcyh5ID0gY291bnRyeV9vZl9wdWIsIHggPSBtZWFuX2JpYXMpLCB3aWR0aCA9IC41LCBmaWxsID0gInB1cnBsZTQiKSsKICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxKSkrCiAgbGFicyh0aXRsZSA9ICJBdmVyYWdlIGFuZCBNYXhpbXVtIEJpYXMgU2NvcmUgYnkgQ291bnRyeSIsCiAgICAgICB4ID0gIkJpYXMiLAogICAgICAgeSA9ICIiKSsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci55ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueSA9IGVsZW1lbnRfYmxhbmsoKSwpCmBgYAoKKioqCgojIyBQb2xhcml0eSBvZiBXb3JkcwpcbgoKIyMjIFBvbGFyaXR5IG92ZXIgVGltZVxuCiMjIyMjIEluIHRoaXMgZ3JhcGgsIHdlIHZpc3VhbGl6ZSBob3cgdGhlIHBvbGFyaXR5IG9mIGhlYWRsaW5lcyBoYXMgY2hhbmdlZCBvdmVyIHRoZSBwYXN0IHRlbiB5ZWFycy4gVGhlIHBvbGFyaXR5IHNjb3JlcyByZXByZXNlbnQgaG93IHNlbnNhdGlvbmFsaXplZCBhIGhlYWRsaW5lIGlzLiBTZW5zYXRpb25hbCBoZWFkbGluZXMgc2FjcmlmaWNlIGFjY3VyYWN5IGluIGFuIGF0dGVtcHQgdG8gcHJvdm9rZSBhbiBlbW90aW9uYWwgcmVzcG9uc2UgZnJvbSByZWFkZXJzLiBUaGV5IGFyZSBkZXNpZ25lZCB0byBnZW5lcmF0ZSBpbnRlcmVzdCB0aHJvdWdoIGVtb3Rpb25hbCBtYW5pcHVsYXRpb24uIEluIGdlbmVyYWwsIHRoZSBwb2xhcml0eSBvZiBuZXdzIGhlYWRsaW5lcyBhYm91dCB3b21lbiBpcyBoaWdoZXIgdGhhbiB0aGUgcG9sYXJpdHkgZm9yIG90aGVyIGhlYWRsaW5lcy4gSW4gdGhlIHBhc3QgdGVuIHllYXJzLCBwb2xhcml0eSBoYXMgaW5jcmVhc2VkLCBhbmQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgcG9sYXJpdHkgb2YgaGVhZGxpbmVzIGFib3V0IHdvbWVuIGFuZCB0aGUgcG9sYXJpdHkgb2YgZ2VuZXJhbCBoZWFkbGluZXMgaGFzIHdpZGVuZWQuClxuCgpgYGB7ciwgZWNobz1GQUxTRX0KcG9sYXJpdHlfb3Zlcl90aW1lICU+JSAKICBncm91cF9ieShgeWVhcmApICU+JSAKICBzdW1tYXJpc2Uod29tZW5fbWVhbiA9IG1lYW4oYHdvbWVuX3BvbGFyaXR5X21lYW5gKSwKICAgICAgICAgICAgYWxsX21lYW4gPSBtZWFuKGBhbGxfcG9sYXJpdHlfbWVhbmApLAogICAgICAgICAgICB5ZWFyKSAlPiUgCiAgZ2dwbG90KCkrCiAgZ2VvbV9zbW9vdGgoYWVzKHg9YHllYXJgLCB5PWB3b21lbl9tZWFuYCksIGNvbG9yID0gInB1cnBsZTQiLCBzZSA9IEZBTFNFKSsKICBnZW9tX3Ntb290aChhZXMoeD1geWVhcmAsIHk9YGFsbF9tZWFuYCksIGNvbG9yID0gImJsYWNrIiwgc2UgPSBGQUxTRSkrCiAgZ2VvbV9wb2ludChhZXMoeD0yMDIwLjAsIHk9MC40MjUpLCAKICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgZmlsbCA9ICIjYzJiMWUzIiwgCiAgICAgICAgICAgICBzaXplID0gNSwgc3Ryb2tlID0gMiwgc2hhcGUgPSAyMSkgKwogIGdlb21fcG9pbnQoYWVzKHg9MjAyMC4wLCB5PTAuMjgpLCBzaXplID0gMi41KSsKICBnZW9tX2xhYmVsKGxhYmVsID0gIkhlYWRsaW5lcyBhYm91dFxud29tZW4iLCB4PSAyMDE5LjQsIHk9MC40MCwgY29sb3IgPSAicHVycGxlNCIpKwogIGdlb21fbGFiZWwobGFiZWwgPSAiSGVhZGxpbmVzIGFib3V0XG5vdGhlciB0b3BpY3MiLCB4PTIwMTkuNCwgeT0gMC4yNSkrCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IGMoMjAxMCwgMjAxMiwgMjAxNCwgMjAxNiwgMjAxOCwgMjAyMCkpKwogIGxhYnModGl0bGUgPSAiQXZlcmFnZSBQb2xhcml0eSBvZiBOZXdzIEhlYWRsaW5lcyBvdmVyIFRpbWUiLAogICAgICAgeSA9ICIiLAogICAgICAgeCA9ICIiKSsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLmxpbmUueCA9IGVsZW1lbnRfbGluZShjb2xvciA9ICJibGFjayIpKQpgYGAKCgojIyMgUG9sYXJpdHkgb2YgTmV3cyBTaXRlc1xuCiMjIyMjIEluIHRoZSBncmFwaCBiZWxvdywgdGhlIGRpZmZlcmVuY2UgaW4gdGhlIGF2ZXJhZ2UgcG9sYXJpdHkgc2NvcmUgYmV0d2VlbiBoZWFkbGluZXMgYWJvdXQgd29tZW4gYW5kIG90aGVyIGhlYWRsaW5lcyBhcmUgc2hvd24gZm9yIGVhY2ggc2l0ZS4gVGhlIHNpdGVzIGFyZSBvcmRlcmVkIGJ5IHRoZSBsYXJnZXN0IGF2ZXJhZ2UgcG9sYXJpdHkgb2YgaGVhZGxpbmVzIGFib3V0IHdvbWVuLiBBbG1vc3QgZXZlcnkgc2l0ZSdzIGhlYWRsaW5lcyBhYm91dCB3b21lbiBhcmUgbW9yZSBwb2xhcml6aW5nIHRoYW4gdGhlaXIgaGVhZGxpbmVzIGFib3V0IG90aGVyIHRvcGljcy4gClxuCgpgYGB7ciwgZmlnLmhlaWdodD0gMjQsIGZpZy53aWR0aD0gOCwgZWNobz1GQUxTRX0KcG9sYXJpdHlfc2l0ZSAlPiUgCiAgZ2dwbG90KCkrCiAgZ2VvbV9zZWdtZW50KGFlcyh4PXBvbGFyaXR5X2Jhc2UsIHhlbmQ9cG9sYXJpdHlfd29tZW4sIHk9ZmN0X3Jlb3JkZXIoc2l0ZSwgcG9sYXJpdHlfd29tZW4pLCB5ZW5kPXNpdGUpLCBzaXplID0gMSkrCiAgZ2VvbV9wb2ludChhZXMoeD1wb2xhcml0eV9iYXNlLCB5ID0gc2l0ZSksIHNpemUgPSAyKSsKICBnZW9tX3BvaW50KGFlcyh4PXBvbGFyaXR5X3dvbWVuLCB5ID0gc2l0ZSksIGNvbG9yID0gImJsYWNrIiwgZmlsbCA9ICIjYzJiMWUzIiwgCiAgICAgICAgICAgICBzaXplID0gMywgc3Ryb2tlID0gMSwgc2hhcGUgPSAyMSkrCiAgbGFicyh0aXRsZSA9ICIiLAogICAgICAgeSA9ICIiLAogICAgICAgeCA9ICJQb2xhcml0eSIpKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCkpCmBgYAoKKioqCgojIyBIZWFkbGluZSBFeGFtcGxlc1xuCgpcbgoKYGBge3IsIGVjaG89RkFMU0V9Cmxhc3RfdGhyZWVfaGVhZGxpbmVzIDwtIGhlYWRsaW5lX2V4YW1wbGVzICU+JSAKICByZW5hbWUoIkhlYWRsaW5lIiA9IGBoZWFkbGluZV9ub19zaXRlYCwKICAgICAgICAgIlNpdGUiID0gYHNpdGVgLAogICAgICAgICAiQ291bnRyeSIgPSBgY291bnRyeWAsCiAgICAgICAgICJCaWFzIiA9IGBiaWFzYCkgJT4lCiAgYXJyYW5nZShgQmlhc2ApICU+JQogIGRpc3RpbmN0KFNpdGUsIC5rZWVwX2FsbCA9IFRSVUUpICU+JSAKICBzbGljZSgxOjMpICU+JSAKICBzZWxlY3QoYEhlYWRsaW5lYCwgYFNpdGVgLCBgQ291bnRyeWAsIGBCaWFzYCkKCmxhc3RfdGhyZWVfaGVhZGxpbmVzX3RhYmxlIDwtIGd0KGxhc3RfdGhyZWVfaGVhZGxpbmVzKSAlPiUgCiAgdGFiX2hlYWRlcih0aXRsZSA9ICJMZWFzdCBCaWFzZWQgSGVhZGxpbmUgRXhhbXBsZXMiKSAlPiUgCiAgdGFiX3N0eWxlKHN0eWxlID0gY2VsbF90ZXh0KGNvbG9yID0gInB1cnBsZTQiKSwKICAgICAgICAgICAgbG9jYXRpb25zID0gY2VsbHNfYm9keSgpKQoKbGFzdF90aHJlZV9oZWFkbGluZXNfdGFibGUKYGBgCgpcbgoKYGBge3IsIGVjaG89RkFMU0V9CnRvcF90aHJlZV9oZWFkbGluZXMgPC0gaGVhZGxpbmVfZXhhbXBsZXMgJT4lIAogIHJlbmFtZSgiSGVhZGxpbmUiID0gYGhlYWRsaW5lX25vX3NpdGVgLAogICAgICAgICAiU2l0ZSIgPSBgc2l0ZWAsCiAgICAgICAgICJDb3VudHJ5IiA9IGBjb3VudHJ5YCkgJT4lIAogIG11dGF0ZShCaWFzID0gcm91bmQoYmlhcywgZGlnaXRzID0gMykpICU+JSAKICBhcnJhbmdlKGRlc2MoYEJpYXNgKSkgJT4lCiAgZGlzdGluY3QoU2l0ZSwgLmtlZXBfYWxsID0gVFJVRSkgJT4lIAogIHNsaWNlKDE6MykgJT4lIAogIHNlbGVjdChgSGVhZGxpbmVgLCBgU2l0ZWAsIGBDb3VudHJ5YCwgYEJpYXNgKQoKdG9wX3RocmVlX2hlYWRsaW5lc190YWJsZSA8LSBndCh0b3BfdGhyZWVfaGVhZGxpbmVzKSAlPiUgCiAgdGFiX2hlYWRlcih0aXRsZSA9ICJNb3N0IEJpYXNlZCBIZWFkbGluZSBFeGFtcGxlcyIpICU+JSAKICB0YWJfc3R5bGUoc3R5bGUgPSBjZWxsX3RleHQoY29sb3IgPSAicHVycGxlNCIpLAogICAgICAgICAgICBsb2NhdGlvbnMgPSBjZWxsc19ib2R5KCkpCgp0b3BfdGhyZWVfaGVhZGxpbmVzX3RhYmxlCmBgYApcbgoqKioKCiMjIE1vcmUgRGF0YSBJbmZvcm1hdGlvblxuCiMjIyBEYXRhIENhbGN1bGF0aW9uc1xuCgoKIyMjIyMgUE9MQVJJVFkgQ0FMQ1VMQVRJT05TXG4KV2UgbWVhc3VyZSBwb2xhcml0eSBieSBwZXJmb3JtaW5nIHNlbnRpbWVudCBhbmFseXNpcyBvbiBlYWNoIGhlYWRsaW5lIHVzaW5nIHRoZSBWYWRlciBweXRob24gcGFja2FnZSwgd2hlcmUgZWFjaCBoZWFkbGluZSBnZXRzIGEgc2VudGltZW50IHNjb3JlIGZyb20gLTEgdG8gMSAoZnJvbSBtb3JlIG5lZ2F0aXZlIHRvIG1vcmUgcG9zaXRpdmUpLiBCZWNhdXNlIHdlIGFyZSBpbnRlcmVzdGVkIGluIHBvbGFyaXR5LCB3ZSB0YWtlIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBlYWNoIGhlYWRsaW5lJ3Mgc2NvcmUuXG4KCiMjIyMjIEJJQVMgQ0FMQ1VMQVRJT05TXG4KV2UgbWVhc3VyZSBnZW5kZXIgYmlhcyBieSB0cmFja2luZyB0aGUgY29tYmluZWQgb2NjdXJyZW5jZSBvZiBnZW5kZXJlZCBsYW5ndWFnZSBhbmQgc29jaWFsIHN0ZXJlb3R5cGVzIHVzdWFsbHkgYXNzb2NpYXRlZCB3aXRoIHdvbWVuLiBXZSBkbyB0aGlzIGluIHR3byBzdGVwczpcbgoKMSkgV2UgY2hlY2sgaWYgYSBoZWFkbGluZSBjb250YWlucyBnZW5kZXJlZCBsYW5ndWFnZSAoaS5lLiDigJxzcG9rZXN3b21hbizigJ0g4oCcY2hhaXJ3b21hbizigJ0g4oCcc2hlLOKAnSDigJxoZXIs4oCdIOKAnGJyaWRlLOKAnSDigJxkYXVnaHRlcizigJ0g4oCcZGF1Z2h0ZXJzLOKAnSDigJxmZW1hbGUs4oCdIOKAnGZpYW5jZWUs4oCdIOKAnGdpcmws4oCdIOKAnGdpcmxmcmllbmTigJ0gZXRjLikuXG4KCjIpIElmIGl0IGNvbnRhaW5zIGdlbmRlcmVkIGxhbmd1YWdlLCB3ZSB0aGVuIGNvdW50IHRoZSBudW1iZXIgb2Ygd29yZHMgdGhhdCBhcmUgY29uc2lkZXJlZCB0byBiZSBzb2NpYWwgc3RlcmVvdHlwZXMgYWJvdXQgd29tZW4gKGkuZS4g4oCcd2VhayzigJ0g4oCcbW9kZXN0LOKAnSDigJx2aXJnaW4s4oCdIOKAnHNsdXQs4oCdIOKAnHdob3JlLOKAnSDigJxzZXh5LOKAnSDigJxmZW1pbmluZSzigJ0g4oCcc2Vuc2l0aXZlLOKAnSDigJxlbW90aW9uYWws4oCdIOKAnGdlbnRsZSzigJ0g4oCcc29mdCzigJ0g4oCccHJldHR5LOKAnSDigJxiaXRjaCzigJ0g4oCcc2V4dWFs4oCdIGV0Yy4pLlxuCgpGaW5hbGx5LCB3ZSBub3JtYWxpemUgdGhpcyBjb3VudCBmb3IgYWxsIGhlYWRsaW5lcyB3aXRoaW4gZWFjaCBvdXRsZXQgYXMgYSBzY29yZSBiZXR3ZWVuIDAgYW5kIDEsIGFuZCB3ZSBhZ2dyZWdhdGUgKGkuZS4gYXZlcmFnZSkgdGhpcyBzY29yZSBmb3IgZWFjaCBvdXRsZXQuXG4KCiMjIyBEYXRhIFNvdXJjZVxuCihzaXRlIGZyb20gcHVkZGluZyBodHRwczovL3B1ZGRpbmcuY29vbC8yMDIyLzAyL3dvbWVuLWluLWhlYWRsaW5lcy8pCgoK
=======
LS0tCnRpdGxlOiAiSGVhZGxpbmVzIgphdXRob3I6Ci0gbmFtZTogIkF1ZHJleSBTbXljemVrIgotIG5hbWU6ICJFbGxlcnkgSXNsYW5kIgpkYXRlOiAiNC8yOC8yMDIyIgpvdXRwdXQ6IAogIGh0bWxfZG9jdW1lbnQ6CiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgZGZfcHJpbnQ6IHBhZ2VkCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlCi0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0UsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkKYGBgCgpgYGB7ciBsaWJyYXJpZXMsIGVjaG89RkFMU0UsIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZT1GQUxTRX0KbGlicmFyeSh0aWR5dmVyc2UpICAgICAjIGZvciBncmFwaGluZyBhbmQgZGF0YSBjbGVhbmluZwpsaWJyYXJ5KGx1YnJpZGF0ZSkgICAgICMgZm9yIGRhdGUgbWFuaXB1bGF0aW9uCmxpYnJhcnkoZ2d0aGVtZXMpICAgICAgIyBmb3IgZXZlbiBtb3JlIHBsb3R0aW5nIHRoZW1lcwpsaWJyYXJ5KGdnYW5pbWF0ZSkgICAgICMgZm9yIGFkZGluZyBhbmltYXRpb24gbGF5ZXJzIHRvIGdncGxvdHMKbGlicmFyeShSQ29sb3JCcmV3ZXIpICAjIGZvciBjb2xvciBwYWxldHRlcwpsaWJyYXJ5KHZpcmlkaXMpCmxpYnJhcnkocGxvdGx5KSAgICAgICAgIyBmb3IgdGhlIGdncGxvdGx5KCkgLSBiYXNpYyBpbnRlcmFjdGl2aXR5CmxpYnJhcnkoZ2dhbmltYXRlKSAgICAgIyBmb3IgYWRkaW5nIGFuaW1hdGlvbiBsYXllcnMgdG8gZ2dwbG90cwpsaWJyYXJ5KHRyYW5zZm9ybXIpICAgICMgZm9yICJ0d2VlbmluZyIgKGdnYW5pbWF0ZSkKbGlicmFyeShnaWZza2kpICAgICAgICAjIG5lZWQgdGhlIGxpYnJhcnkgZm9yIGNyZWF0aW5nIGdpZnMgYnV0IGRvbid0IG5lZWQgdG8gbG9hZCBlYWNoIHRpbWUKbGlicmFyeShndCkKbGlicmFyeShtYXBzKQpsaWJyYXJ5KGdnbWFwKQp0aGVtZV9zZXQodGhlbWVfbWluaW1hbCgpKSAjIE15IGZhdm9yaXRlIGdncGxvdCgpIHRoZW1lIDopCmBgYAoKYGBge3IsIGVjaG89RkFMU0UsICB3YXJuaW5nID0gRkFMU0UsIHJlc3VsdHM9RkFMU0UsIGNvbW1lbnQ9RkFMU0V9CmZyZXFfdGhlbWVfd29yZHMgPC0gcmVhZC5jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS90aGUtcHVkZGluZy9kYXRhL21hc3Rlci93b21lbi1pbi1oZWFkbGluZXMvd29yZF90aGVtZXNfZnJlcS5jc3YiKQpmcmVxX2NvdW50cnlfd29yZHMgPC0gcmVhZC5jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS90aGUtcHVkZGluZy9kYXRhL21hc3Rlci93b21lbi1pbi1oZWFkbGluZXMvd29yZF9jb3VudHJ5X2ZyZXEuY3N2IikKaGVhZGxpbmVfc2l0ZSA8LSByZWFkLmNzdigiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3RoZS1wdWRkaW5nL2RhdGEvbWFzdGVyL3dvbWVuLWluLWhlYWRsaW5lcy9oZWFkbGluZXNfc2l0ZS5jc3YiKQp3b3JkX3RoZW1lX3JhbmsgPC0gcmVhZC5jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS90aGUtcHVkZGluZy9kYXRhL21hc3Rlci93b21lbi1pbi1oZWFkbGluZXMvd29yZF90aGVtZXNfcmFuay5jc3YiKQpoZWFkbGluZV9leGFtcGxlcyA8LSByZWFkLmNzdigiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3RoZS1wdWRkaW5nL2RhdGEvbWFzdGVyL3dvbWVuLWluLWhlYWRsaW5lcy9oZWFkbGluZXMuY3N2IikKcG9sYXJpdHlfc2l0ZSA8LSByZWFkLmNzdigiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3RoZS1wdWRkaW5nL2RhdGEvbWFzdGVyL3dvbWVuLWluLWhlYWRsaW5lcy9wb2xhcml0eV9jb21wYXJpc29uX3NpdGVfY291bnRyeV90aW1lLmNzdiIpCnBvbGFyaXR5X292ZXJfdGltZSA8LSByZWFkLmNzdigiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3RoZS1wdWRkaW5nL2RhdGEvbWFzdGVyL3dvbWVuLWluLWhlYWRsaW5lcy9wb2xhcml0eV9jb21wYXJpc29uX2NvdW50cnlfdGltZS5jc3YiKQpgYGAKCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpwaXZvdF9jb3VudHJ5X3dvcmQgPC0gZnJlcV9jb3VudHJ5X3dvcmRzICU+JSAKICBwaXZvdF9sb25nZXIoY29scyA9IC1jb3VudHJ5LAogICAgICAgICAgICAgICBuYW1lc190byA9ICJ3b3JkIiwKICAgICAgICAgICAgICAgdmFsdWVzX3RvID0gIm51bWJlciIpICU+JSAKICBmaWx0ZXIod29yZCAhPSAiWCIpICU+JSAKICBuYS5vbWl0KCkKYGBgCgoKIyMgV29tZW4gaW4gSGVhZGxpbmVzIERhdGEKCiMjIyMgVGhlIGRhdGEgdGFrZW4gaW52b2x2ZWQgdGhlIGZyZXF1ZW5jeSBvZiB3b3JkcyB1c2VkIHNvcnRlZCBieSB0aGVtZSBhbmQgZnJlcXVlbmN5IG9mIHdvcmRzIGJ5IGNvdW50cnkuIFRoZSB0aGVtZXMgYXJlIGNyaW1lIGFuZCB2aW9sZW5jZSwgZW1wb3dlcm1lbnQsIGZlbWFsZSBzdGVyZW90eXBlcywgcGVvcGxlIGFuZCBwbGFjZXMsIHJhY2UsIGV0aG5pY2l0eSBhbmQgaWRlbnRpdHksIGFuZCBubyB0aGVtZS4gVGhlIHdvcmRzIHdlcmUgYWxzbyByYW5rZWQgYnkgdGhlbWUgYmFzZWQgb24gZnJlcXVlbmN5IG9mIHdvcmQgdXNlLiBUaGUgbmV3cyBzaXRlcyB3ZXJlIGFsc28gYXNzaWduZWQgdmFsdWVzIGZvciBiaWFzIGFuZCBwb2xhcml0eSwgdGhlIGNhbGN1bGF0aW9ucyBhcmUgZXhwbGFpbmVkIGF0IHRoZSBib3R0b20gb2YgdGhlIGFydGljbGUuIFRoZXJlIGFyZSBhbHNvIGhlYWRsaW5lIGV4YW1wbGVzIHdoaWNoIGFyZSBpbmRpdmlkdWFsbHkgZ2l2ZW4gYSBiaWFzIHNjb3JlLgpcbgoKCiFbXShoZWFkbGluZXNfZ3JhcGhpYy5qcGcpCgoKKioqCgoKIyMgV29yZHMgQXBwZWFyaW5nIGluIEhlYWRsaW5lc1xuCgoKIyMjIEZyZXFlbmN5IHBlciBUaGVtZSBcbgoKIyMjIyMgQSBjdW11bGF0aXZlIGJhciBncmFwaCBmb3IgdGhlIHdvcmRzIHVzZWQgdG8gZGVzY3JpYmUgd29tZW4gdXNlZCBpbiBoZWFkbGluZXMuIFRoZXkgYXJlIGRpdmlkZWQgaW50byA1IG1haW4gY2F0ZWdvcmllcyB3aXRoIGNyaW1lIGFuZCB2aW9sZW5jZSBoYXZpbmcgdGhlIG1vc3Qgd29yZHMgYW5kIHRoZSBoaWdoZXN0IGZyZXF1ZW5jeS4gVGhlIGdyYXBoIGlzIGludGVyYWN0aXZlIHNvIGVhY2ggd29yZCBjYW4gYmUgaGlnaGxpZ2h0ZWQgd2l0aCB0aGUgaW5kaXZpZHVhbCB3b3JkIGFuZCBmcmVxdWVuY3kuXG4KCgpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KcGl2b3Rfd29yZHMgPC0gZnJlcV90aGVtZV93b3JkcyAlPiUgCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSAtdGhlbWUsCiAgICAgICAgICAgICAgIG5hbWVzX3RvID0gIndvcmQiLAogICAgICAgICAgICAgICB2YWx1ZXNfdG8gPSAiZnJlcSIpICU+JSAKICBuYS5vbWl0KCkKCndvcmRfcGxvdCA8LSBwaXZvdF93b3JkcyAlPiUgCiAgZmlsdGVyKHRoZW1lICE9ICJObyB0aGVtZSIpICU+JSAKICBnZ3Bsb3QoYWVzKHggPSB0aGVtZSwgCiAgICAgICAgICAgICB5ID0gZnJlcSwgCiAgICAgICAgICAgICBmaWxsID0gZmN0X3Jlb3JkZXIodGhlbWUsIHdvcmQpLAogICAgICAgICAgICAgdGV4dCA9IHBhc3RlKCJ3b3JkOiIsIHdvcmQpKSkgKwogICAgZ2VvbV9jb2woY29sb3IgPSAiYmxhY2siKSArCiAgICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCIjNWM3MWQxIiwgIiMzMTQzOTQiLCAiIzU2MjdhOCIsICIjODUzNmNmIiwgIiM5NDJmOTkiLCAiI2E4MzhjOSIpKSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpICsKICAgIGxhYnModGl0bGUgPSAiQ3VtdWxhdGl2ZSBGcmVxdWVuY3kgb2YgV29yZHMgZGVzY3JpYmluZyBXb21lbiBpbiBIZWFkbGluZXMiLAogICAgICAgeCA9ICIiLAogICAgICAgeSA9ICJGcmVxdWVuY3kiKSsKICAgIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQoKCmdncGxvdGx5KHdvcmRfcGxvdCwKICAgICAgICAgdG9vbHRpcCA9IGMoInkiLCAidGV4dCIpKQpgYGAKCiMjIyBUb3AgRml2ZSBXb3JkcyBwZXIgVGhlbWUKIyMjIyMgVGhlIHdvcmRzIHRha2VuIGZyb20gaGVhZGxpbmVzIGFjcm9zcyBkaWZmZXJlbnQgbmV3cyBzaXRlcyB3ZXJlIHNvcnRlZCBpbnRvIHRoZW1lIGNhdGVnb3JpZXMgYW5kIHJhbmtlZCBieSBvY2N1cnJlbmNlLiBUaGUgZm9sbG93aW5nIGNvbHVtbiBjaGFydCBkZXNjcmliZXMgdGhlIHRvcCBmaXZlIHdvcmRzIHVzZWQgc29ydGVkIGJ5IHRoZW1lIHdpdGggdGhlIHdvcmQgJ21hbicgYXBwZWFyaW5nIGFsbW9zdCB0cmlwbGUgdGhlIGF2ZXJhZ2Ugd29yZCB1c2UuIENyaW1lIGFuZCB2aW9sZW5jZSBoYXZlIHRoZSBoaWdoZXN0IGF2ZXJhZ2Ugd29yZCBjb3VudCBvZiBhbnkgdGhlbWUuIApcbgoKYGBge3IsIGVjaG89RkFMU0V9CndvcmRfdGhlbWVfcmFuayAlPiUgCiAgZmlsdGVyKGByYW5rYCA8IDYpICU+JSAKICBzZWxlY3QoIWBYYCkgJT4lIAogIGdncGxvdChhZXMoeSA9IGZjdF9yZW9yZGVyKHdvcmQsIHRoZW1lKSwgeCA9IGNvdW50KSkgKwogIGdlb21fY29sKGFlcyhmaWxsID0gdGhlbWUpKSsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCIjNWM3MWQxIiwgIiMzMTQzOTQiLCAiIzU2MjdhOCIsICIjODUzNmNmIiwgIiM5NDJmOTkiLCAiI2E4MzhjOSIpKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpKwogIGxhYnModGl0bGUgPSAiIiwKICAgICAgIHkgPSAiIiwKICAgICAgIHggPSAiIikKYGBgCgoqKiogCgojIyBEYXRhIHRha2VuIGJ5IENvdW50cnkKXG4KCiMjIyBDb3VudHJ5IE1hcFxuCgojIyMjIyBEYXRhIHdhcyB0YWtlbiBmcm9tIG5ld3Mgc2l0ZXMgZnJvbSBmb3VyIGRpZmZlcmVudCBjb3VudHJpZXMgd2l0aCB2YXJ5aW5nIG51bWJlcnMgb2YgbmV3cyBzb3VyY2VzIHVzZWQuIEZyb20gdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSwgODYgbmV3IHNpdGVzIHdlcmUgdXNlZC4gRnJvbSB0aGUgVW5pdGVkIEtpbmdkb20sIDQxIG5ld3Mgc2l0ZXMgd2VyZSB1c2VkLiBGcm9tIFNvdXRoIEFmcmljYSwgMjMgbmV3cyBzaXRlcyB3ZXJlIHVzZWQuIEZyb20gSW5kaWEsIDM2IG5ld3Mgc2l0ZXMgd2VyZSB1c2VkLiAKXG4KCmBgYHtyLCBmaWcuYWx0PSAiQSB3b3JsZCBtYXAgd2l0aCB0aGUgVVNBLCB0aGUgVUssIFNvdXRoIEFmcmljYSwgYW5kIEluZGlhIGNvbG9yZWQgaW4gZ3JlZW4gdG8gc2lnbmlmeSB3aGVyZSBkYXRhIHdhcyB0YWtlbiBmcm9tLiIsIGVjaG89RkFMU0UsIHdhcm5pbmcgPSBGQUxTRX0Kd29ybGRfbWFwIDwtIG1hcF9kYXRhKCJ3b3JsZCIpCgpoZWFkbGluZV9zaXRlICU+JSAKICBncm91cF9ieShjb3VudHJ5X29mX3B1YikgJT4lIAogIHN1bW1hcmlzZShiaWFzX2NvdW50cnkgPSBtZWFuKGJpYXMpKSAlPiUgCiAgZ2dwbG90KCkgKwogICAgZ2VvbV9tYXAoZGF0YSA9IHdvcmxkX21hcCwgbWFwID0gd29ybGRfbWFwLAogICAgICAgICAgICAgYWVzKGxvbmcsIGxhdCwgbWFwX2lkID0gcmVnaW9uKSwKICAgICAgICAgICAgIGZpbGwgPSAibGlnaHRncmF5IikrCiAgICBnZW9tX21hcChtYXAgPSB3b3JsZF9tYXAsCiAgICAgICAgICAgIGFlcyhtYXBfaWQgPSBgY291bnRyeV9vZl9wdWJgKSwKICAgICAgICAgICAgZmlsbCA9ICJwdXJwbGU0IiwKICAgICAgICAgICAgY29sb3IgPSAicHVycGxlNCIpKwogICAgZXhwYW5kX2xpbWl0cyh4ID0gd29ybGRfbWFwJGxvbmcsIHkgPSB3b3JsZF9tYXAkbGF0KSArIAogICAgdGhlbWVfbWFwKCkKYGBgCgojIyMgQmlhcyBTY29yZSBieSBDb3VudHJ5XG4KIyMjIyMgVGhlIGF2ZXJhZ2UgYmlhcyBvZiBuZXdzIHNpdGVzIG9mdGVuIHZhcmllcyBmcm9tIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGJpYXMgdmFsdWVzIGdpdmVuIHRvIGRpZmZlcmVudCBoZWFkbGluZXMuIFRoZSBmb2xsb3dpbmcgY29sdW1uIGNoYXJ0IGRpc3BsYXlzIHRoZSBtZWFuIGJpYXMgYnkgY291bnRyeSBhbG9uZyB3aXRoIHRoZSBtYXhpbXVtIGJpYXMgb2YgYSBoZWFkbGluZSBwdWJsaXNoZWQgYnkgYSBzaXRlIGluIHRoZSBjb3VudHJ5LiBUaGUgbWluaW11bSBiaWFzIHNjb3JlIGlzIHplcm8gZm9yIGFsbCBjb3VudHJpZXMgc28gbm8gdmlzdWFsIHJlcHJlc2VudGF0aW9uIHdhcyBhZGRlZC4KXG4KCmBgYHtyLCBlY2hvPUZBTFNFfQpoZWFkbGluZV9zaXRlICU+JQogIGdyb3VwX2J5KGNvdW50cnlfb2ZfcHViKSAlPiUKICBzdW1tYXJpemUobWVhbl9iaWFzID0gbWVhbihiaWFzKSwgbWF4X2JpYXMgPSBtYXgoYmlhcykpICU+JSAKICBnZ3Bsb3QoKSsKICBnZW9tX2NvbChhZXMoeSA9IGNvdW50cnlfb2ZfcHViLCB4ID0gbWF4X2JpYXMpLCAKICAgICAgICAgICBmaWxsID0gIiNjMmIxZTMiLCB3aWR0aCA9IC43NSkrCiAgZ2VvbV9jb2woYWVzKHkgPSBjb3VudHJ5X29mX3B1YiwgeCA9IG1lYW5fYmlhcyksIAogICAgICAgICAgIHdpZHRoID0gLjUsIGZpbGwgPSAicHVycGxlNCIpKwogIGdlb21fdGV4dChhZXMoeT0gY291bnRyeV9vZl9wdWIsIHggPSBtZWFuX2JpYXMsIGxhYmVsID0gcm91bmQobWVhbl9iaWFzLCAzKSksCiAgICAgICAgICAgIGhqdXN0ID0gLTAuMiwgc2l6ZSA9IDMsIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAxKSkrCiAgZ2VvbV90ZXh0KGFlcyh5PSBjb3VudHJ5X29mX3B1YiwgeCA9IG1heF9iaWFzLCBsYWJlbCA9IHJvdW5kKG1heF9iaWFzLCAzKSksCiAgICAgICAgICAgIGhqdXN0ID0gLTAuMiwgc2l6ZSA9IDMsIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAxKSkrCiAgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgMSkpKwogIGxhYnModGl0bGUgPSAiQXZlcmFnZSBhbmQgTWF4aW11bSBCaWFzIFNjb3JlIiwKICAgICAgIHggPSAiQmlhcyIsCiAgICAgICB5ID0gIiIpKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci55ID0gZWxlbWVudF9ibGFuaygpLCkKYGBgCgoqKioKCiMjIFBvbGFyaXR5IG9mIFdvcmRzClxuCgojIyMgUG9sYXJpdHkgb3ZlciBUaW1lXG4KIyMjIyMgSW4gdGhpcyBncmFwaCwgd2UgdmlzdWFsaXplIGhvdyB0aGUgcG9sYXJpdHkgb2YgaGVhZGxpbmVzIGhhcyBjaGFuZ2VkIG92ZXIgdGhlIHBhc3QgdGVuIHllYXJzLiBUaGUgcG9sYXJpdHkgc2NvcmVzIHJlcHJlc2VudCBob3cgc2Vuc2F0aW9uYWxpemVkIGEgaGVhZGxpbmUgaXMuIFNlbnNhdGlvbmFsIGhlYWRsaW5lcyBzYWNyaWZpY2UgYWNjdXJhY3kgaW4gYW4gYXR0ZW1wdCB0byBwcm92b2tlIGFuIGVtb3Rpb25hbCByZXNwb25zZSBmcm9tIHJlYWRlcnMuIFRoZXkgYXJlIGRlc2lnbmVkIHRvIGdlbmVyYXRlIGludGVyZXN0IHRocm91Z2ggZW1vdGlvbmFsIG1hbmlwdWxhdGlvbi4gSW4gZ2VuZXJhbCwgdGhlIHBvbGFyaXR5IG9mIG5ld3MgaGVhZGxpbmVzIGFib3V0IHdvbWVuIGlzIGhpZ2hlciB0aGFuIHRoZSBwb2xhcml0eSBmb3Igb3RoZXIgaGVhZGxpbmVzLiBJbiB0aGUgcGFzdCB0ZW4geWVhcnMsIHBvbGFyaXR5IGhhcyBpbmNyZWFzZWQsIGFuZCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBwb2xhcml0eSBvZiBoZWFkbGluZXMgYWJvdXQgd29tZW4gYW5kIHRoZSBwb2xhcml0eSBvZiBnZW5lcmFsIGhlYWRsaW5lcyBoYXMgd2lkZW5lZC4KXG4KCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQpwb2xhcml0eV90aW1lX2FuaW0gPC0gcG9sYXJpdHlfb3Zlcl90aW1lICU+JSAKICBncm91cF9ieShgeWVhcmApICU+JSAKICBzdW1tYXJpc2Uod29tZW5fbWVhbiA9IG1lYW4oYHdvbWVuX3BvbGFyaXR5X21lYW5gKSwKICAgICAgICAgICAgYWxsX21lYW4gPSBtZWFuKGBhbGxfcG9sYXJpdHlfbWVhbmApLAogICAgICAgICAgICB5ZWFyKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBnZ3Bsb3QoKSsKICBnZW9tX2xpbmUoYWVzKHg9YHllYXJgLCB5PWB3b21lbl9tZWFuYCksIGNvbG9yID0gInB1cnBsZTQiLCBzZSA9IEZBTFNFKSsKICBnZW9tX2xpbmUoYWVzKHg9YHllYXJgLCB5PWBhbGxfbWVhbmApLCBjb2xvciA9ICJibGFjayIsIHNlID0gRkFMU0UpKwogIGdlb21fcG9pbnQoYWVzKHg9YHllYXJgLCB5PWB3b21lbl9tZWFuYCksCiAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZpbGwgPSAiI2MyYjFlMyIsCiAgICAgICAgICAgICBzaXplID0gNSwgc3Ryb2tlID0gMiwgc2hhcGUgPSAyMSkgKwogIGdlb21fcG9pbnQoYWVzKHg9YHllYXJgLCB5PWBhbGxfbWVhbmApLCBzaXplID0gMi41KSsKICBnZW9tX2xhYmVsKGxhYmVsID0gIkhlYWRsaW5lcyBhYm91dCBcbndvbWVuIiwgYWVzKHg9YHllYXJgLCB5PSBgd29tZW5fbWVhbmApLCAKICAgICAgICAgICAgIGNvbG9yID0gInB1cnBsZTQiLCBwb3NpdGlvbiA9IHBvc2l0aW9uX251ZGdlKHggPSAwLCB5ID0gMC4wMikpKwogIGdlb21fbGFiZWwobGFiZWwgPSAiSGVhZGxpbmVzIGFib3V0XG5vdGhlciB0b3BpY3MiLCBhZXMoeD1geWVhcmAsIHk9IGBhbGxfbWVhbmApLAogICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9udWRnZSh4ID0gMCwgeSA9IDAuMDE2NSkpKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBjKDIwMTAsIDIwMTIsIDIwMTQsIDIwMTYsIDIwMTgsIDIwMjApKSsKICBsYWJzKHRpdGxlID0gIiIsCiAgICAgICB5ID0gIiIsCiAgICAgICB4ID0gIiIpKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci55ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMubGluZS54ID0gZWxlbWVudF9saW5lKGNvbG9yID0gImJsYWNrIikpKwogIHRyYW5zaXRpb25fcmV2ZWFsKHllYXIpCgphbmltX3NhdmUoInBvbGFyaXR5X3RpbWVfYW5pbS5naWYiLAogICAgICAgICAgYW5pbWF0ZShwb2xhcml0eV90aW1lX2FuaW0sIGVuZF9wYXVzZSA9IDEwKSkKYGBgCgpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoInBvbGFyaXR5X3RpbWVfYW5pbS5naWYiKQpgYGAKCiMjIyBQb2xhcml0eSBvZiBOZXdzIFNpdGVzXG4KIyMjIyMgSW4gdGhlIGdyYXBoIGJlbG93LCB0aGUgZGlmZmVyZW5jZSBpbiB0aGUgYXZlcmFnZSBwb2xhcml0eSBzY29yZSBiZXR3ZWVuIGhlYWRsaW5lcyBhYm91dCB3b21lbiBhbmQgb3RoZXIgaGVhZGxpbmVzIGFyZSBzaG93biBmb3IgZWFjaCBzaXRlLiBUaGUgc2l0ZXMgYXJlIG9yZGVyZWQgYnkgdGhlIGxhcmdlc3QgYXZlcmFnZSBwb2xhcml0eSBvZiBoZWFkbGluZXMgYWJvdXQgd29tZW4uIEFsbW9zdCBldmVyeSBzaXRlJ3MgaGVhZGxpbmVzIGFib3V0IHdvbWVuIGFyZSBtb3JlIHBvbGFyaXppbmcgdGhhbiB0aGVpciBoZWFkbGluZXMgYWJvdXQgb3RoZXIgdG9waWNzLiAKXG4KCmBgYHtyLCBmaWcuaGVpZ2h0PSAyNCwgZmlnLndpZHRoPSA4LCBlY2hvPUZBTFNFfQpwb2xhcml0eV9zaXRlICU+JSAKICBnZ3Bsb3QoKSsKICBnZW9tX3NlZ21lbnQoYWVzKHg9cG9sYXJpdHlfYmFzZSwgeGVuZD1wb2xhcml0eV93b21lbiwgeT1mY3RfcmVvcmRlcihzaXRlLCBwb2xhcml0eV93b21lbiksIHllbmQ9c2l0ZSksIHNpemUgPSAxKSsKICBnZW9tX3BvaW50KGFlcyh4PXBvbGFyaXR5X2Jhc2UsIHkgPSBzaXRlKSwgc2l6ZSA9IDIpKwogIGdlb21fcG9pbnQoYWVzKHg9cG9sYXJpdHlfd29tZW4sIHkgPSBzaXRlKSwgY29sb3IgPSAiYmxhY2siLCBmaWxsID0gIiNjMmIxZTMiLCAKICAgICAgICAgICAgIHNpemUgPSAzLCBzdHJva2UgPSAxLCBzaGFwZSA9IDIxKSsKICBsYWJzKHRpdGxlID0gIiIsCiAgICAgICB5ID0gIiIsCiAgICAgICB4ID0gIlBvbGFyaXR5IikrCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSksCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSkKYGBgCgoqKioKCiMjIEhlYWRsaW5lIEV4YW1wbGVzXG4KClxuCgpgYGB7ciwgZWNobz1GQUxTRX0KbGFzdF90aHJlZV9oZWFkbGluZXMgPC0gaGVhZGxpbmVfZXhhbXBsZXMgJT4lIAogIHJlbmFtZSgiSGVhZGxpbmUiID0gYGhlYWRsaW5lX25vX3NpdGVgLAogICAgICAgICAiU2l0ZSIgPSBgc2l0ZWAsCiAgICAgICAgICJDb3VudHJ5IiA9IGBjb3VudHJ5YCwKICAgICAgICAgIkJpYXMiID0gYGJpYXNgKSAlPiUKICBhcnJhbmdlKGBCaWFzYCkgJT4lCiAgZGlzdGluY3QoU2l0ZSwgLmtlZXBfYWxsID0gVFJVRSkgJT4lIAogIHNsaWNlKDE6MykgJT4lIAogIHNlbGVjdChgSGVhZGxpbmVgLCBgU2l0ZWAsIGBDb3VudHJ5YCwgYEJpYXNgKQoKbGFzdF90aHJlZV9oZWFkbGluZXNfdGFibGUgPC0gZ3QobGFzdF90aHJlZV9oZWFkbGluZXMpICU+JSAKICB0YWJfaGVhZGVyKHRpdGxlID0gIkxlYXN0IEJpYXNlZCBIZWFkbGluZSBFeGFtcGxlcyIpICU+JSAKICB0YWJfc3R5bGUoc3R5bGUgPSBjZWxsX3RleHQoY29sb3IgPSAicHVycGxlNCIpLAogICAgICAgICAgICBsb2NhdGlvbnMgPSBjZWxsc19ib2R5KCkpCgpsYXN0X3RocmVlX2hlYWRsaW5lc190YWJsZQpgYGAKClxuCgpgYGB7ciwgZWNobz1GQUxTRX0KdG9wX3RocmVlX2hlYWRsaW5lcyA8LSBoZWFkbGluZV9leGFtcGxlcyAlPiUgCiAgcmVuYW1lKCJIZWFkbGluZSIgPSBgaGVhZGxpbmVfbm9fc2l0ZWAsCiAgICAgICAgICJTaXRlIiA9IGBzaXRlYCwKICAgICAgICAgIkNvdW50cnkiID0gYGNvdW50cnlgKSAlPiUgCiAgZmlsdGVyKFNpdGUgIT0gImRhaWx5bWFpbC5jby51ayIpICU+JSAKICBtdXRhdGUoQmlhcyA9IHJvdW5kKGJpYXMsIGRpZ2l0cyA9IDMpKSAlPiUgCiAgYXJyYW5nZShkZXNjKGBCaWFzYCkpICU+JQogIGRpc3RpbmN0KFNpdGUsIC5rZWVwX2FsbCA9IFRSVUUpICU+JSAKICBzbGljZSgxOjMpICU+JSAKICBzZWxlY3QoYEhlYWRsaW5lYCwgYFNpdGVgLCBgQ291bnRyeWAsIGBCaWFzYCkKCnRvcF90aHJlZV9oZWFkbGluZXNfdGFibGUgPC0gZ3QodG9wX3RocmVlX2hlYWRsaW5lcykgJT4lIAogIHRhYl9oZWFkZXIodGl0bGUgPSAiTW9zdCBCaWFzZWQgSGVhZGxpbmUgRXhhbXBsZXMiKSAlPiUgCiAgdGFiX3N0eWxlKHN0eWxlID0gY2VsbF90ZXh0KGNvbG9yID0gInB1cnBsZTQiKSwKICAgICAgICAgICAgbG9jYXRpb25zID0gY2VsbHNfYm9keSgpKQoKdG9wX3RocmVlX2hlYWRsaW5lc190YWJsZQpgYGAKXG4KKioqCgojIyBNb3JlIERhdGEgSW5mb3JtYXRpb25cbgojIyMgRGF0YSBDYWxjdWxhdGlvbnNcbgoKCiMjIyMjIFBPTEFSSVRZIENBTENVTEFUSU9OU1xuCldlIG1lYXN1cmUgcG9sYXJpdHkgYnkgcGVyZm9ybWluZyBzZW50aW1lbnQgYW5hbHlzaXMgb24gZWFjaCBoZWFkbGluZSB1c2luZyB0aGUgVmFkZXIgcHl0aG9uIHBhY2thZ2UsIHdoZXJlIGVhY2ggaGVhZGxpbmUgZ2V0cyBhIHNlbnRpbWVudCBzY29yZSBmcm9tIC0xIHRvIDEgKGZyb20gbW9yZSBuZWdhdGl2ZSB0byBtb3JlIHBvc2l0aXZlKS4gQmVjYXVzZSB3ZSBhcmUgaW50ZXJlc3RlZCBpbiBwb2xhcml0eSwgd2UgdGFrZSB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgZWFjaCBoZWFkbGluZSdzIHNjb3JlLlxuCgojIyMjIyBCSUFTIENBTENVTEFUSU9OU1xuCldlIG1lYXN1cmUgZ2VuZGVyIGJpYXMgYnkgdHJhY2tpbmcgdGhlIGNvbWJpbmVkIG9jY3VycmVuY2Ugb2YgZ2VuZGVyZWQgbGFuZ3VhZ2UgYW5kIHNvY2lhbCBzdGVyZW90eXBlcyB1c3VhbGx5IGFzc29jaWF0ZWQgd2l0aCB3b21lbi4gV2UgZG8gdGhpcyBpbiB0d28gc3RlcHM6XG4KCjEpIFdlIGNoZWNrIGlmIGEgaGVhZGxpbmUgY29udGFpbnMgZ2VuZGVyZWQgbGFuZ3VhZ2UgKGkuZS4g4oCcc3Bva2Vzd29tYW4s4oCdIOKAnGNoYWlyd29tYW4s4oCdIOKAnHNoZSzigJ0g4oCcaGVyLOKAnSDigJxicmlkZSzigJ0g4oCcZGF1Z2h0ZXIs4oCdIOKAnGRhdWdodGVycyzigJ0g4oCcZmVtYWxlLOKAnSDigJxmaWFuY2VlLOKAnSDigJxnaXJsLOKAnSDigJxnaXJsZnJpZW5k4oCdIGV0Yy4pLlxuCgoyKSBJZiBpdCBjb250YWlucyBnZW5kZXJlZCBsYW5ndWFnZSwgd2UgdGhlbiBjb3VudCB0aGUgbnVtYmVyIG9mIHdvcmRzIHRoYXQgYXJlIGNvbnNpZGVyZWQgdG8gYmUgc29jaWFsIHN0ZXJlb3R5cGVzIGFib3V0IHdvbWVuIChpLmUuIOKAnHdlYWss4oCdIOKAnG1vZGVzdCzigJ0g4oCcdmlyZ2luLOKAnSDigJxzbHV0LOKAnSDigJx3aG9yZSzigJ0g4oCcc2V4eSzigJ0g4oCcZmVtaW5pbmUs4oCdIOKAnHNlbnNpdGl2ZSzigJ0g4oCcZW1vdGlvbmFsLOKAnSDigJxnZW50bGUs4oCdIOKAnHNvZnQs4oCdIOKAnHByZXR0eSzigJ0g4oCcYml0Y2gs4oCdIOKAnHNleHVhbOKAnSBldGMuKS5cbgoKRmluYWxseSwgd2Ugbm9ybWFsaXplIHRoaXMgY291bnQgZm9yIGFsbCBoZWFkbGluZXMgd2l0aGluIGVhY2ggb3V0bGV0IGFzIGEgc2NvcmUgYmV0d2VlbiAwIGFuZCAxLCBhbmQgd2UgYWdncmVnYXRlIChpLmUuIGF2ZXJhZ2UpIHRoaXMgc2NvcmUgZm9yIGVhY2ggb3V0bGV0LlxuCgojIyMgRGF0YSBTb3VyY2VcbgpodHRwczovL2dpdGh1Yi5jb20vdGhlLXB1ZGRpbmcvZGF0YS90cmVlL21hc3Rlci93b21lbi1pbi1oZWFkbGluZXMKCgoK
>>>>>>> 8000e0777d88f16020f124d0a6f0b5fa6a1bc957